/**
 * Notes: 企业微信控制器
 * Date: 2024-06-30
 */

const BaseController = require('../base_controller.js');
const UserModel = require('../../model/user_model.js');
const AdminModel = require('../../model/admin_model.js');
const LogModel = require('../../model/log_model.js');
const cloudBase = require('../../../../framework/cloud/cloud_base.js');
const dataCheck = require('../../../../framework/validate/data_check.js');
const helper = require('../../../../framework/helper/helper.js');

class WecomController extends BaseController {

	/** 
	 * 企业微信小程序登录
	 */
	async login() {
		// 获取企业微信用户身份
		const wxContext = cloudBase.getWXContext();
		
		// 检查是否为企业微信小程序环境
		if (!wxContext.FROM_WXWORK) {
			return this.getFail('非企业微信环境');
		}
		
		// 获取用户的企业微信身份信息
		const { WXWORK_USERID, WXWORK_CORPID } = wxContext;
		
		if (!WXWORK_USERID || !WXWORK_CORPID) {
			return this.getFail('未获取到企业微信身份');
		}
		
		// 记录日志
		LogModel.insertLog('企业微信登录', { userid: WXWORK_USERID, corpid: WXWORK_CORPID });
		
		try {
			// 查询用户是否已经存在
			let user = await UserModel.getUserByWxworkId(WXWORK_USERID);
			
			// 如果用户不存在，需要查询企业微信接口，获取用户详情并创建用户
			if (!user) {
				// 获取企业微信用户详情 - 假设已经有了企业微信API模块
				// 实际项目中需要实现企业微信API调用
				const wecomApi = require('../../service/wecom_api.js');
				const userDetail = await wecomApi.getUserDetail(WXWORK_USERID);
				
				// 创建新用户
				const userId = helper.genRandomString(20);
				const data = {
					USER_ID: userId,
					USER_MINI_OPENID: wxContext.OPENID,
					USER_NAME: userDetail.name || '微信用户',
					USER_MOBILE: userDetail.mobile || '',
					USER_WXWORK_ID: WXWORK_USERID,
					USER_WXWORK_CORPID: WXWORK_CORPID,
					USER_TYPE: userDetail.isAdmin ? 1 : 0, // 根据企业微信角色设置用户类型
					USER_STATUS: 1, // 默认为正常状态
					USER_DEPT: userDetail.department || '',
					USER_DEPT_ID: userDetail.departmentId || '',
					USER_TITLE: userDetail.title || '',
					USER_ADD_TIME: this._timestamp,
					USER_ADD_IP: this._ip,
				};
				
				await UserModel.insert(data);
				
				// 获取新创建的用户信息
				user = await UserModel.getUserById(userId);
				
				if (!user) {
					return this.getFail('用户创建失败');
				}
			}
			
			// 检查用户状态
			if (user.USER_STATUS == 0) {
				return this.getFail('账号已停用');
			}
			
			// 用户存在，生成登录凭证
			const token = {
				id: user.USER_ID,
				name: user.USER_NAME,
				pic: user.USER_PIC,
				status: user.USER_STATUS,
				type: user.USER_TYPE,
				phone: user.USER_MOBILE,
				wxworkId: user.USER_WXWORK_ID,
				dept: user.USER_DEPT
			};
			
			// 更新最近登录时间
			await UserModel.updateLoginTime(user.USER_ID);
			
			// 返回登录凭证
			return this.getSuccess({ token });
		} catch (error) {
			console.error('企业微信登录异常:', error);
			return this.getFail('企业微信登录异常，请重试');
		}
	}
}

module.exports = WecomController; 